package 算法API综合练习;

import java.util.Arrays;
import java.util.Comparator;

public class Text {
    public static void main(String[] args) {
        //字符串比较--->compareTo:字母的ASCII码值相减.,
        String s1="a";
        String s2="b";
        System.out.println(s1.compareTo(s2));
        //创建女朋友对象
        girlfriend gf1=new girlfriend("xiaoshishi",18,1.67);
        girlfriend gf2=new girlfriend("xiaodanda",20,1.72);
        girlfriend gf3=new girlfriend("xiaohuihui",20,1.78);
        girlfriend gf4=new girlfriend("abc",20,1.78);

        //将封装到数组中
        girlfriend[] arr={gf1,gf2,gf3,gf4};

        //遍历数组
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i].getAge() + "," + arr[i].getHeight() + "," + arr[i].getName());
        }

        //排序---匿名内部类
        Arrays.sort(arr, new Comparator<girlfriend>() {
            @Override
            public int compare(girlfriend o1, girlfriend o2) {
                //年龄一样看身高,身高一样看名字
//                if (o1.getAge()!=o2.getAge()){
//                    return o1.getAge()-o2.getAge();
//                }else {
//                    if (o1.getHeight()!=o2.getHeight()){
//                        return (int) (o1.getHeight()-o2.getHeight());
//                    }else {
//                        return o1.getName().compareTo(o2.getName());
//                    }
//                }
                //利用三元运算符
                double temp=o1.getAge()-o2.getAge();
                //第一个temp三元运算符判断年龄相同的时候身高是否相同.
                temp = temp == 0 ? o1.getHeight() - o2.getHeight() : temp;
                //第二个三元运算符,如果上一个temp返回的是0表示身高也相同判断姓名
                temp = temp==0?o1.getName().compareTo(o2.getName()):temp;
                if (temp>0){return 1;} else if (temp<0) {
                    return -1;
                }else {
                    return 0;
                }
            }
        });
        //Lambda表达式
        Arrays.sort(arr,(o1,o2)->  {
                //年龄一样看身高,身高一样看名字
//                if (o1.getAge()!=o2.getAge()){
//                    return o1.getAge()-o2.getAge();
//                }else {
//                    if (o1.getHeight()!=o2.getHeight()){
//                        return (int) (o1.getHeight()-o2.getHeight());
//                    }else {
//                        return o1.getName().compareTo(o2.getName());
//                    }
//                }
                //利用三元运算符
                double temp=o1.getAge()-o2.getAge();
                //第一个temp三元运算符判断年龄相同的时候身高是否相同.
                temp = temp == 0 ? o1.getHeight() - o2.getHeight() : temp;
                //第二个三元运算符,如果上一个temp返回的是0表示身高也相同判断姓名
                temp = temp==0?o1.getName().compareTo(o2.getName()):temp;
                if (temp>0){return 1;} else if (temp<0) {
                    return -1;
                }else {
                    return 0;
                }
            }
        );

    }
}
